package com.iuie.ns.system.mapper.user;

import java.io.Serializable;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.iuie.ns.frame.persistence.annotations.MyBatisRepository;
import com.iuie.ns.system.vo.role.SysRoleVO;
import com.iuie.ns.system.vo.user.SysUserVO;

/**
 * @desc 用户的mapper接口
 * @createTime 2017年6月11日 下午4:28:49
 * @author iuie
 */
@MyBatisRepository
public interface SysUserMapper {

    /**
     * 根据userID查找用户角色
     * @param userId
     * @return
     * @date 2017年6月11日 下午4:04:58
     */
    public List<String> findRoleCodesByUserId(String userId);

    /**
     * 根据用户id查询用户权限
     * @param userId
     * @return
     * @date 2017年6月11日 下午4:08:26
     */
    public List<String> findPermissionCodesByUserId(String userId);

    /**
     * 根据用户id查询完整版本的用户信息
     * @param id
     * @return
     */
	public SysUserVO findByIdWithWhole(String id);

	/**
	 * 根据条件分页查询
	 * @param t
	 * @return
	 * @date 2017年7月7日 下午9:42:47
	 */
	public List<SysUserVO> findByCondition(@Param("user") SysUserVO t);

	/**
	 * 保存用户角色关系
	 * @param userId
	 * @param roleIds
	 * @date 2017年7月30日 下午10:39:36
	 */
	public void saveUserRole(@Param("userId")String userId, @Param("roleIds") String[] roleIds);
	
	/**
	 * 获取最大用户ID
	 * @return
	 * @date 2017年7月30日 下午11:17:07
	 */
	public String queryMaxUserId();

	/**
	 * 删除用户角色
	 * @param userId
	 * @date 2017年7月31日 上午8:26:38
	 */
	public void deleteUserAllRole(@Param("userId") String userId);

	/**
	 * 根据id查询用户，要求查询出用户的所有角色
	 * @param id
	 * @return
	 * @date 2017年8月5日 下午2:14:15
	 */
	public SysUserVO findByIdWithRoles(@Param("userId") Serializable id);

	/**
	 * 修改用户资料
	 * @param user
	 * @date 2017年8月5日 下午2:34:50
	 */
	public void updateOneUser(@Param("user") SysUserVO user);

	/**
	 * 重置用户密码
	 * @param userId
	 * @param defaultUserPwd
	 * @date 2017年8月6日 上午11:49:15
	 */
	public void resetUserPwd(@Param("userId") String userId, @Param("userPwd") String defaultUserPwd);

	/**
	 * 更新用户当前角色
	 * @param user
	 * @param role
	 * @date 2017年8月6日 下午7:00:16
	 */
	public void updateCurrentRole(@Param("user") SysUserVO user, @Param("role") SysRoleVO role);

	/**
	 * 根据token查询用户
	 * @return
	 */
	public SysUserVO findUserByToken(@Param("token") String token);

}
